package tech.aistar.corejava.day13;

import javax.swing.plaf.synth.SynthOptionPaneUI;
import java.io.File;
import java.io.IOException;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:File实例
 * @date 2019/8/1 0001
 */
public class FileDemo {
    public static void main(String[] args) {
        //判断文件还是目录,就是通过File构造的pathname
        //createFile("file.txt");//src的根目录下
        //createFile("E:/file.txt");
        //createFile("src/tech/aistar/corejava/day13/file3.txt");

        //createFolder("e:/aa/bb/cc/dd/ee");
        //createFolder("src/tech/aistar/corejava/day13/aa");

      //  File f = new File("e:/aa");

       // System.out.println(f.isDirectory());//true

        //如果这个f实例尚未创建成功! - 即使是是一个文件的实例,那么返回的也是false
       // System.out.println(f.isFile());//false

        //listFolder("E:\\Java\\jdk1.8.0_66");

        //delFileOrNullFolder("src/tech/aistar/corejava/day13/file3.txt");

        delFileOrNullFolder("E:\\aa\\bb\\cc\\dd\\ee");
    }

    /**
     * 创建文件
     * @param pathname
     */
    public static void createFile(String pathname){
        //1. 构建一个File实例
        File file = new File(pathname);//文件的实例

        //2. boolean createNewFile();
//        try {
//            if(file.createNewFile()){//创建文件,如果文件已经存在,则创建失败!
//                System.out.println("创建文件成功!");
//            }else{
//                System.out.println("创建文件失败!");
//            }
//        } catch (IOException e) {//构建的pathname中的目录不存在
//            e.printStackTrace();
//        }

        //判断文件是否存在
        if(!file.exists()){
            try {
                if(file.createNewFile()){//创建文件,如果文件已经存在,则创建失败!
                    System.out.println("创建文件成功!");

                    //获取文件的名称[包含后缀]
                    System.out.println("文件名称:"+file.getName());

                    //E:\workspaces\corejava_teach\src\tech\aistar\corejava\day13\file2.txt
                    System.out.println("文件的绝对路径:"+file.getAbsolutePath());
                    //E:\workspaces\corejava_teach\src\tech\aistar\corejava\day13\file2.txt
                    System.out.println(file.getAbsoluteFile());

                    //src\tech\aistar\corejava\day13\file2.txt -> 构造中传入的路径
                    System.out.println("构造中传入的路径:"+file.getPath());


                    System.out.println("文件的长度:"+file.length());//文件的长度 0

                    //src\tech\aistar\corejava\day13
                    System.out.println("文件的父目录(相对的):"+file.getParent());

                    System.out.println(file);//相对路径

                }else{
                    System.out.println("创建文件失败!");
                }
            } catch (IOException e) {//构建的pathname中的目录不存在
                e.printStackTrace();
            }
        }else{
            System.out.println("文件已经存在了!");
        }
    }

    /**
     * 创建目录(文件夹)
     * @param pathname
     */
    public static void createFolder(String pathname){
        //1. 构建一个File实例
        File file = new File(pathname);//目录的实例

        //2.判断目录是否存在
        if(!file.exists()){
            //1. boolean mkdir();//创建单层次的目录
            //2. boolean mkdirs();//可以连续创建深层次的目录

            //希望目录的file实例才能去调用mkdir方法
            //判断file是否为目录的实例

            //boolean isDirectory();//判断是否为目录
            //boolean isFile();//判断是否为文件
            //判断file是否目录的实例
               // if(file.mkdir()){
            if(file.mkdirs()){
                    //获取信息
                    System.out.println("目录名称:"+file.getName());
                    System.out.println(file+"目录,创建成功!");

                }else{
                    System.out.println("目录创建失败!");
                }

        }else{
            System.out.println(file+"已经存在了!");
        }
    }

    /**
     * 列举某个目录下的第一层的内容
     * 如果是文件 - 则只需要输出文件的名称
     * 如果是目录 - 则需要输出目录的绝对路径
     * @param pathname 目录的路径
     */
    public static void listFolder(String pathname){
        //1. 利用目录路径构建一个File实例
        File file = new File(pathname);

        //2. 判断file是否存在
        if(file.exists()){

            //3. 判断是否为目录
            if(file.isDirectory()){

                //4.返回的是file实例对应的第一层的所有的file数组
                File[] files = file.listFiles();

                //5. 确认第一层有内容
                if(null!=files && files.length>0){
                    for(File f:files){
                        if(f.isFile()){
                            //如果是文件 - 输出名称
                            System.out.println(f.getName());
                        }else if(f.isDirectory()){
                            //如果是目录 - 输出绝对路径
                            System.out.println(f.getAbsolutePath());
                        }
                    }
                }


            }else{
                System.out.println(file+"不是一个目录路径!");
            }

        }else{
            System.out.println(file+"不存在!");
        }
    }


    /**
     * boolean delete();//1. 直接删除文件  2.直接删除空目录
     *                  //3. 如果是一个非空目录,则删除失败
     * @param pathname
     */
    public static void delFileOrNullFolder(String pathname){
        File file = new File(pathname);

        //判断file是否存在
        if(file.exists()){

            if(file.delete()){
                System.out.println(file+"删除成功!");
            }else{
                System.out.println("删除失败!");
            }

        }else{
            System.out.println(file+"不存在!");
        }
    }


}
